package BaseDatos;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
import Objetos.Ruta;
import Objetos.Sesion;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

/**
 *
 * @author ARMGARCES
 */
public class Validadores {    
    /**Obtiene el codigo del vendedor a partir de su id de usuario.
     * Reibe una variable tipo Integer y retorna una variable estatica tipo cadena
     * con el codigo del vendedor.
     * @param _user Variable tipo Integer distinto a 0.
     * @return variable estatica tipo cadena on el codigo del vendedor.
     */
    public static String getCodVendedor(int _user){
        boolean error = false;
        try{ 
            Connection conn = BaseDatos.getConexionDiga();
            String sql   = "SELECT c.codigo FROM Diga.Usuario u,Diga.Cargo c,Diga.Historial h "
                    + "WHERE c.idCargo = h.fk_idCargo AND u.fk_idEmpleado = h.fk_idEmpleado AND "
                    + "h.fechaFin IS NULL AND u.idUsuario = "+_user+";";
            String mnsj  = "";
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet result = ps.executeQuery();
            if(result.next()){
                conn.close();
                return result.getString("codigo");                               
            }
            conn.close();
            return "xxx";
        }catch(Exception e){
            error = true;
            e.printStackTrace();
            System.out.println("e = " + e);
        }
        return "Error";
    }
    /**
     * Valida un usuario segun su nombre de usuario y contraseña en la BD.
     * Recibe dos variables tipo cadena y retorna una variable estatica tipo Integer.
     * Consulta en BD si coinciden los valores entrantes con los guardados en la BD.
     * @param _user Variable tipo cadena que debe ser distinta a null ni un conjunto de espacios.
     * @param _pswd Variable tipo contraseña que debe ser distinta a null ni un conjunto de espacios.
     * @return Variable statica tipo Integer con el id del usuario, de no encontrar coincidecias retorna null.
     * @throws SQLException  
     */
    public static int validarUsuario(String _user, String _pswd) throws SQLException{
        int resp = 0;  
        Connection conn = null;
        if (!_user.trim().equals("") || _user!=null || _pswd.trim().equals("") || _pswd!=null){
            try{
                conn =  BaseDatos.getConexionDiga();
                String sql   = "SELECT * FROM Diga.Usuario WHERE "
                        + "usuario LIKE BINARY '"+_user+"' AND pswd LIKE BINARY '"+_pswd+"' ;";

                PreparedStatement ps = conn.prepareStatement(sql);
                ResultSet result = ps.executeQuery();

                if(result.next()){
                    resp = result.getInt("idUsuario");                
                }
            }catch(Exception e){
                resp = -1;
                System.out.println("e = " + e);
            }finally{
                conn.close();
                return resp;
            }
        }else{
            return resp;
        }
    }
    /**
     * Valida que una sesion no este finalizada y retorna su id.
     * Recibe objeto tipo Sesion y retorna una variable estatica tipo Integer.
     * Valida si la sesion esta abierta, de estarlo, retorna objeto Sesion con el idSesion seteado.
     * @param _sesion objeto tipo Sesion, debe llegar con el parametro user lleno.
     * @return Variable Integer con el id de la sesion abierta, si no esta abierta retorna 0.
     */
    public static int validarSesionesAbiertas(Sesion _sesion){        
        int idSesion =0;
        try{
            Connection conn = BaseDatos.getConexionBd(); 
            String buscar = "SELECT s.idSesion FROM Bd.Sesion s,Diga.Usuario u ";
            String where = "WHERE s.user LIKE BINARY u.usuario ";
            String and1  = "AND fin is null ";
            String and2  = "AND u.usuario LIKE BINARY '"+_sesion.getUser()+"' Limit 0,1;";
            String sql = buscar + where + and1 + and2;
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
             while(rs.next()){
                idSesion = rs.getInt("idSesion");
            }               
            conn.close();
        }catch(Exception e){
            System.out.println("e = " + e.getMessage());
        }
        return idSesion;
    }
    /**
     * Comprueba que la sesion no tenga parametros vacios.
     * Recibe un objeto tipo Sesion y comprueba que los parametros user,pswd,horaIni,codTel 
     * esten llenos.
     * @param _sesion Objeto tipo Sesion.
     * @return Variable estatica tipo boolean que arroja true si todos los parametros requeridos estan llenos.
     */
    public static boolean sesionIsNotNull(Sesion _sesion){
        boolean b = true;
        if(_sesion != null || !_sesion.isNull()){
            if(_sesion.getUser()==null){
                return false;
            }
            if(_sesion.getUser().trim().equals("")){
                return false;
            }
            if(_sesion.getPswd()==null){
                return false;
            }
            if(_sesion.getPswd().trim().equals("")){
                return false;
            }
            if(_sesion.getHoraIni()==null){
                return false;
            }
            if(_sesion.getCodtel()==0 ){
                return false;
            }
        }else{
            return false;
        }
        return true;
    }
    /**
     * Valida que exista una ruta determinada.
     * Recibe un objeto tipo Ruta y devuelve una variable estatica booleana.
     * @param _ruta objeto tipo Ruta que debe tener lleno el parametro idRuta.
     * @return true si luego de la busqueda en BD hay coincidencias, si no, retorna false.
     */
    public static boolean validarRuta(Ruta _ruta){
        boolean valido=false;
        try{
            Connection conn = BaseDatos.getConexionDiga();   
            String buscar = "SELECT * FROM Diga.Ruta WHERE idRuta = "+_ruta.getIdRuta()+"";
            PreparedStatement ps = conn.prepareStatement(buscar);
            ResultSet rs; 
            rs = ps.executeQuery();
                if (rs.next() && rs.getInt(2)!=0)
                   valido= true;
        }
        catch(Exception e){
            System.out.println("Ruta no valida: "+e);
        }
        return valido;
    }
    
}
